{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 逻辑回归-线性可分\n",
    "### 案例：根据学生的两门学生成绩，预测该学生是否会被大学录取\n",
    "#### 数据集：ex2data1.txt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "      Exam 1     Exam 2  Accepted\n0  34.623660  78.024693         0\n1  30.286711  43.894998         0\n2  35.847409  72.902198         0\n3  60.182599  86.308552         1\n4  79.032736  75.344376         1",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Exam 1</th>\n      <th>Exam 2</th>\n      <th>Accepted</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>34.623660</td>\n      <td>78.024693</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>30.286711</td>\n      <td>43.894998</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>35.847409</td>\n      <td>72.902198</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>60.182599</td>\n      <td>86.308552</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>79.032736</td>\n      <td>75.344376</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'ex2data1.txt'\n",
    "data = pd.read_csv(path, names=['Exam 1', 'Exam 2', 'Accepted'])\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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Dz/8UFxzzTUiMTFRHDlyRAih//P/+OOPRdeuXcVjjz0mDh8+LF555RWRkJAg1q5d6z5G79dACCFcLpfo16+fuO+++/z26f38p0+fLvr27eueel5WVibOPfdcMX/+fPcxer8GQgixefNm8c4774iqqiqxdetWMXz4cHHppZeKlpYWIYT+rkFTU5PYt2+f2LdvnwAgli5dKvbt2ye++uorIURo5ztr1iyRnp4u3n33XbF3715x5ZVXcuq52sycOVP0799fdO/eXfTp00dcddVV7kBHCGnq3aJFi4TVahVms1lcccUV4sCBAwq2ODZ8gx29Xwe5dkS3bt1EWlqayMvLEwcPHnTv1/v5CyHEW2+9JYYOHSrMZrM4//zzxYsvvui13wjXYMuWLQKAOHTokN8+vZ9/Y2OjmDNnjujXr58466yzRFZWlli4cKFobm52H6P3ayCEEK+++qrIysoS3bt3F1arVcyePVscP37cvV9v12Dbtm0CgN9j+vTpQojQzvfkyZPi97//vejVq5eIj48X11xzjaipqYloO01CCBG5fiIiIiIidWHODhEREekagx0iIiLSNQY7REREpGsMdoiIiEjXGOwQERGRrjHYISIiIl1jsENERES6xmCHiIiIdI3BDhEREekagx0ionY89thjyM7ORkJCAnr27Kl0c4iogxjsEBG1o6WlBddffz1+97vfKd0UIgoDgx0iUg0hBJYsWYKsrCzEx8dj+PDh2LBhA4QQuPrqqzFx4kTIy/kdP34c/fr1w8KFCwEALpcLt912GzIzMxEfH4/zzjsPTz/9tNfrz5gxA9deey2KioqQkpKCnj174uGHH8bp06dx7733olevXkhPT8df//pXr+97+OGHMXfuXAwbNiw2F4KIIqqr0g0gIpI9+OCDKCsrw4oVKzBo0CDs2LEDN998M/r06YPVq1dj2LBheOaZZzBnzhzMmjULKSkpWLx4MQCgtbUV6enpeO2113DuueeisrIS//M//4PU1FT89re/df+M9957D+np6dixYwd27dqF2267DR988AGuuOIKfPTRR3j11Vcxa9YsjB8/HjabTaErQUSRxFXPiUgVfvjhB5x77rl47733MHr0aPf222+/HSdOnEBpaSlef/11FBQU4O6778bTTz+Nffv24Wc/+1nQ15w9eza++eYbbNiwAYDUs7N9+3ZUVVWhSxepY/v8889HcnIyduzYAUDqIbJYLHjppZdw4403er3e3/72NxQWFuL48eMRPnsiiib27BCRKnz22Wc4deoUxo8f77W9paUFI0aMAABcf/312LRpE4qLi7FixQq/QOf555/HSy+9hK+++gonT55ES0sLLrroIq9jhgwZ4g50ACAlJQVDhw51fx0XF4fevXvD4XBE+AyJSCkMdohIFVpbWwEA//jHP9C3b1+vfWazGQBw4sQJ7NmzB3FxcTh8+LDXMa+99hrmzp2LP//5zxg9ejQSExPx5JNP4qOPPvI6rlu3bl5fm0ymgNvk9hCR9jHYISJVGDx4MMxmM2pqapCTkxPwmHvuuQddunTBO++8g1/+8peYPHkyrrzySgDAzp07kZ2djbvuust9/JdffhmTthORujHYISJVSExMxLx58zB37ly0trbi8ssvR2NjIyorK9GjRw+ce+65+Otf/4oPPvgAF198Me6//35Mnz4d//nPf3DOOedg4MCBWLNmDbZs2YLMzEyUlJRg9+7dyMzM7HTbampqcPToUdTU1MDlcmH//v0AgIEDB6JHjx6dfn0iii5OPSci1XjkkUfw0EMPobi4GBdccAF+8Ytf4K233kJGRgZuu+02LF68GBdffDEAYNGiRUhLS8OsWbMAALNmzUJeXh5uuOEGjBo1Ct99951XL09nPPTQQxgxYgQWLVqE77//HiNGjMCIESPwySefROT1iSi6OBuLiIiIdI09O0RERKRrDHaIiIhI1xjsEBERka4x2CEiIiJdY7BDREREusZgh4iIiHSNwQ4RERHpGoMdIiIi0jUGO0RERKRrDHaIiIhI1xjsEBERka79fwgwyMp5OSGNAAAAAElFTkSuQmCC\n"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "0     34.623660\n1     30.286711\n2     35.847409\n5     45.083277\n10    95.861555\nName: Exam 1, dtype: float64"
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.scatter(data[data['Accepted'] == 0]['Exam 1'], data[data['Accepted'] == 0]['Exam 2'], c='r', marker='x', label='y=0')\n",
    "ax.scatter(data[data['Accepted'] == 1]['Exam 1'], data[data['Accepted'] == 1]['Exam 2'], c='b', marker='o', label='y=1')\n",
    "ax.legend()\n",
    "ax.set(xlabel='exam1',\n",
    "       ylabel='exam2')\n",
    "plt.show()\n",
    "(data['Exam 1'][data['Accepted'] == 0]).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_Xy(data):\n",
    "    data.insert(0, 'ones', 1)\n",
    "    X_ = data.iloc[:, 0:-1]\n",
    "    X = X_.values\n",
    "\n",
    "    y_ = data.iloc[:, -1]\n",
    "    y = y_.values.reshape(len(y_), 1)\n",
    "\n",
    "    return X, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = get_Xy(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "(100, 3)"
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "(100, 1)"
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    return 1 / (1 + np.exp(-z))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "def costFunction(X, y, theta):\n",
    "    A = sigmoid(X @ theta)\n",
    "\n",
    "    first = y * np.log(A)\n",
    "    second = (1 - y) * np.log(1 - A)\n",
    "\n",
    "    return -np.sum(first + second) / len(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "(3, 1)"
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta = np.zeros((3, 1))\n",
    "theta.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6931471805599453\n"
     ]
    }
   ],
   "source": [
    "cost_init = costFunction(X, y, theta)\n",
    "print(cost_init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradientDescent(X, y, theta, iters, alpha):\n",
    "    m = len(X)\n",
    "    costs = []\n",
    "\n",
    "    for i in range(iters):\n",
    "        A = sigmoid(X @ theta)\n",
    "        theta = theta - (alpha / m) * X.T @ (A - y)\n",
    "        cost = costFunction(X, y, theta)\n",
    "        costs.append(cost)\n",
    "        if i % 1000 == 0:\n",
    "            print(cost)\n",
    "    return costs, theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "alpha = 0.004\n",
    "iters = 200000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.9886538578930084\n",
      "3.078170019864155\n",
      "5.487009635362496\n",
      "1.8519433661332634\n",
      "2.9551289424083595\n",
      "5.438688730769618\n",
      "1.804612809072851\n",
      "2.8312715776074047\n",
      "5.3886531633606145\n",
      "1.756153811712155\n",
      "2.706676380747814\n",
      "5.3365673644957425\n",
      "1.7062807047694801\n",
      "2.5818508519054273\n",
      "5.281774101800353\n",
      "1.654412995851205\n",
      "2.4578430947435757\n",
      "5.223255119969365\n",
      "1.5996612097145546\n",
      "2.3362477519414626\n",
      "5.159653459570274\n",
      "1.5408871901849084\n",
      "2.2190492038468905\n",
      "5.089387088751128\n",
      "1.476856785108147\n",
      "2.10826850905365\n",
      "5.010845104587983\n",
      "1.4064493632805843\n",
      "2.005433890383272\n",
      "4.9225734611717336\n",
      "1.3288041261254444\n",
      "1.9109646054893654\n",
      "4.823257484826611\n",
      "1.2432202250971678\n",
      "1.8235866121521414\n",
      "4.711246821296763\n",
      "1.1486277932139577\n",
      "1.7397667362448002\n",
      "4.58325740045735\n",
      "1.0423478306006695\n",
      "1.652586574603404\n",
      "4.430932868329269\n",
      "0.9166267386002209\n",
      "1.5465331276550867\n",
      "4.224624720512682\n",
      "0.7330944584991163\n",
      "3.9520709655769544\n",
      "1.115095340214284\n",
      "3.93912521174624\n",
      "0.4181482209600352\n",
      "3.7379122586603324\n",
      "0.28403008381623446\n",
      "0.8040201118506516\n",
      "0.26839632646204487\n",
      "0.24523623659870075\n",
      "0.7696907304106029\n",
      "3.3341933756784283\n",
      "0.6748752810756887\n",
      "0.31649896023536445\n",
      "0.23151076693189496\n",
      "1.0707715728766347\n",
      "0.3845729590069322\n",
      "0.2992177273717379\n",
      "0.4135663562341656\n",
      "0.9696144041318395\n",
      "0.6215486830985413\n",
      "1.826576419788221\n",
      "2.6640340287611934\n",
      "0.9999788928077595\n",
      "0.38845720753636775\n",
      "0.30085687331363575\n",
      "1.1027405828084438\n",
      "2.2765664206708434\n",
      "2.444095093951281\n",
      "0.8864434475467824\n",
      "0.3224644657422974\n",
      "0.35522857530593444\n",
      "1.669517651875898\n",
      "0.4309692853297228\n",
      "0.6530212586691562\n",
      "0.5849740396161554\n",
      "0.5420382922952514\n",
      "0.5811454644155017\n",
      "0.6283665742475001\n",
      "0.7097657303866862\n",
      "0.73102834935715\n",
      "0.7541087623054501\n",
      "0.7793891294396065\n",
      "0.8073629012075668\n",
      "0.8387403315704057\n",
      "0.8746137092710174\n",
      "0.9168318502429197\n",
      "0.9690365343026918\n",
      "1.0407011674958797\n",
      "1.166881800610423\n",
      "1.1822987371918035\n",
      "1.1662318448122055\n",
      "1.150233392011524\n",
      "1.1343068922238941\n",
      "1.1184563671688539\n",
      "1.1026863099626751\n",
      "1.0870016401578644\n",
      "1.0714076534488224\n",
      "1.055909966212048\n",
      "1.0405144552548857\n",
      "1.0252271933693031\n",
      "1.010054381512467\n",
      "0.9950022786505768\n",
      "0.9800771304885211\n",
      "0.9652850984533099\n",
      "0.9506321903863946\n",
      "0.9361241944240619\n",
      "0.921766617497023\n",
      "0.9075646297635873\n",
      "0.8935230161097096\n",
      "0.8796461356161949\n",
      "0.8659378896224047\n",
      "0.8524016987249277\n",
      "0.8390404887564368\n",
      "0.8258566855118492\n",
      "0.8128522177396158\n",
      "0.8000285277078996\n",
      "0.7873865884936234\n",
      "0.7749269270327052\n",
      "0.7626496519082658\n",
      "0.7505544848391367\n",
      "0.7386407948564824\n",
      "0.726907634213754\n",
      "0.715353775157636\n",
      "0.7039777467867258\n",
      "0.6927778713327548\n",
      "0.6817522993106075\n",
      "0.6708990430926605\n",
      "0.660216008566083\n",
      "0.6497010246265276\n",
      "0.6393518703454144\n",
      "0.6291662997209043\n",
      "0.6191420639839929\n",
      "0.609276931481057\n",
      "0.5995687051946256\n",
      "0.5900152379936091\n",
      "0.5806144457271842\n",
      "0.5713643182905552\n",
      "0.562262928799765\n",
      "0.5533084410159185\n",
      "0.5444991151581902\n",
      "0.5358333122407368\n",
      "0.5273094970614656\n",
      "0.5189262399614353\n",
      "0.5106822174631712\n",
      "0.5025762118842436\n",
      "0.49460711001076924\n",
      "0.48677390090302436\n",
      "0.4790756728935836\n",
      "0.4715116098271509\n",
      "0.46408098658150365\n",
      "0.4567831638998123\n",
      "0.4496175825580173\n",
      "0.4425837568861733\n",
      "0.4356812676596383\n",
      "0.42890975437652046\n",
      "0.4222689069400822\n",
      "0.4157584567702914\n",
      "0.4093781673768537\n",
      "0.403127824436613\n",
      "0.3970072254311512\n",
      "0.3910161689149757\n",
      "0.38515444350099803\n",
      "0.37942181666594865\n",
      "0.3738180234951941\n",
      "0.36834275550087214\n",
      "0.3629956496606994\n",
      "0.35777627783399163\n",
      "0.3526841367181423\n",
      "0.34771863850913676\n",
      "0.3428791024263675\n",
      "0.3381647472525399\n",
      "0.33357468502409104\n",
      "0.3291079159880734\n",
      "0.3247633249164831\n",
      "0.32053967884088685\n",
      "0.3164356262391883\n",
      "0.3124496976744014\n",
      "0.3085803078530764\n",
      "0.30482575904011566\n",
      "0.3011842457386704\n",
      "0.29765386051900544\n",
      "0.2942326008603837\n",
      "0.2909183768544107\n",
      "0.28770901960876416\n",
      "0.28460229018559496\n",
      "0.28159588890922593\n",
      "0.27868746488264007\n",
      "0.27587462556163145\n",
      "0.2731549462470804\n",
      "0.270525979370839\n",
      "0.2679852634665671\n",
      "0.2655303317341102\n",
      "0.26315872012355224\n",
      "0.2608679748811594\n"
     ]
    }
   ],
   "source": [
    "costs, theta_final = gradientDescent(X, y, theta, iters, alpha)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": "array([[-23.77314018],\n       [  0.18687162],\n       [  0.18041411]])"
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta_final"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(X, theta):\n",
    "    prob = sigmoid(X @ theta)\n",
    "\n",
    "    return [1 if x >= 0.5 else 0 for x in prob]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100\n",
      "0.86\n"
     ]
    }
   ],
   "source": [
    "y_ = np.array(predict(X, theta_final))\n",
    "y_pre = y_.reshape(len(y_), 1)\n",
    "\n",
    "acc = np.mean(y_pre == y)\n",
    "\n",
    "print(acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 决策边界\n",
    "# 三个参数 w0 w1 w2     w0+w1x1+w2x2=0   -->  x2 = -(w0/w2)-(w1/w2)x1\n",
    "\n",
    "coef1 = - theta_final[0, 0] / theta_final[2, 0]\n",
    "coef2 = - theta_final[1, 0] / theta_final[2, 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(20, 100, 100)\n",
    "f = coef1 + coef2 * x\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "ax.scatter(data[data['Accepted'] == 0]['Exam 1'], data[data['Accepted'] == 0]['Exam 2'], c='r', marker='x', label='y=0')\n",
    "ax.scatter(data[data['Accepted'] == 1]['Exam 1'], data[data['Accepted'] == 1]['Exam 2'], c='b', marker='o', label='y=1')\n",
    "ax.legend()\n",
    "ax.set(xlabel='exam1',\n",
    "       ylabel='exam2')\n",
    "\n",
    "ax.plot(x, f, c='g')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
